perm filename A98.TEX[106,PHY] blob sn#834451 filedate 1987-02-11 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	\magnification\magstephalf
C00010 ENDMK
CāŠ—;
\magnification\magstephalf
\input macro.tex
\def\today{\ifcase\month\or
  January\or February\or March\or April\or May\or June\or
  July\or August\or September\or October\or November\or December\fi
  \space\number\day, \number\year}
\baselineskip 14pt
\rm
\line{\sevenrm a98.tex[106,phy] \today\hfill}

\font\rmn=cmr9

\bigskip

{\baselineskip0pt
{\obeylines\obeyspaces\let =\ \tt
        *****     *****
        ******    *****
        *******   *****
        ********  *****
        ********* *****
        ***************
        ***** *********
        *****  ********
        *****   *******
        *****    ******
        *****     *****
}}

How can we design a program to print the letter ``{\tt N}'' as shown above?
First, let's print out a block of {\tt A}'s the same size as the~{\tt N}.
(Later we will change the program so that some of the {\tt A}'s become
{\tt *}'s and some become blank spaces.)

\medskip
{\obeylines\obeyspaces\let =\ \tt
        FOR R:=1 TO 11 DO
           BEGIN
           FOR C:=1 TO 15 DO
              WRITE('A');
           WRITELN
           END
}

\medskip
{\baselineskip10pt
{\obeylines\obeyspaces\let =\ \tt
        AAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAA
}}

%\vfill\eject

\smallskip
Now we change the program so that everything in columns 6 to 15 is a~{\tt B},
rather than an~{\tt A}. We do this by changing {\tt WRITE('A')} to

\smallskip
{\obeylines\obeyspaces\let =\ \tt
        IF C<=5 THEN WRITE('A') ELSE WRITE('B')
}

\medskip
{\baselineskip10pt
{\obeylines\obeyspaces\let =\ \tt
        AAAAABBBBBBBBBB
        AAAAABBBBBBBBBB
        AAAAABBBBBBBBBB
        AAAAABBBBBBBBBB
        AAAAABBBBBBBBBB
        AAAAABBBBBBBBBB
        AAAAABBBBBBBBBB
        AAAAABBBBBBBBBB
        AAAAABBBBBBBBBB
        AAAAABBBBBBBBBB
        AAAAABBBBBBBBBB
}}

\vfill\eject

\medskip\noindent
Again, we change the {\tt WRITE('B')} to

\smallskip
{\obeylines\obeyspaces\let =\ \tt
        IF C>=11 THEN WRITE('B') ELSE WRITE('C')
}

\medskip
{\baselineskip10pt
{\obeylines\obeyspaces\let =\ \tt
        AAAAACCCCCBBBBB
        AAAAACCCCCBBBBB
        AAAAACCCCCBBBBB
        AAAAACCCCCBBBBB
        AAAAACCCCCBBBBB
        AAAAACCCCCBBBBB
        AAAAACCCCCBBBBB
        AAAAACCCCCBBBBB
        AAAAACCCCCBBBBB
        AAAAACCCCCBBBBB
        AAAAACCCCCBBBBB
}}

\medskip\noindent
The whole program is now

\smallskip
{\obeylines\obeyspaces\let =\ \tt
        FOR R:=1 TO 11 DO
           BEGIN
           FOR C:=1 TO 15 DO
              IF C<=5 THEN WRITE('A')
              ELSE IF C>=11 THEN WRITE('B')
              ELSE WRITE('C')
           WRITELN
           END
}

\medskip\noindent
Now we change {\tt WRITE('C')} to

\smallskip
{\obeylines\obeyspaces\let =\ \tt
        IF C>=5+R THEN WRITE('C') ELSE WRITE('D')
}

\medskip
{\baselineskip10pt
{\obeylines\obeyspaces\let =\ \tt
        AAAAACCCCCBBBBB
        AAAAADCCCCBBBBB
        AAAAADDCCCBBBBB
        AAAAADDDCCBBBBB
        AAAAADDDDCBBBBB
        AAAAADDDDDBBBBB
        AAAAADDDDDBBBBB
        AAAAADDDDDBBBBB
        AAAAADDDDDBBBBB
        AAAAADDDDDBBBBB
        AAAAADDDDDBBBBB
}}

{\rmn
{\narrower\smallskip\noindent
{\bf Drill:} Why {\tt C>=5+R}?
\smallskip}
}

\smallskip\noindent
and finally change {\tt WRITE('D')} to

\smallskip
{\obeylines\obeyspaces\let =\ \tt
        IF C>=R THEN WRITE('D') ELSE WRITE('E')
}


\medskip
{\baselineskip10pt
{\obeylines\obeyspaces\let =\ \tt
        AAAAACCCCCBBBBB
        AAAAADCCCCBBBBB
        AAAAADDCCCBBBBB
        AAAAADDDCCBBBBB
        AAAAADDDDCBBBBB
        AAAAADDDDDBBBBB
        AAAAAEDDDDBBBBB
        AAAAAEEDDDBBBBB
        AAAAAEEEDDBBBBB
        AAAAAEEEEDBBBBB
        AAAAAEEEEEBBBBB
}}

\vfill\eject

\smallskip\noindent
If we change the character constants `{\tt A}', `{\tt D}', and `{\tt B}' to
asterisks, and `{\tt C}', `{\tt E}', to blanks, the program is

\smallskip
{\obeylines\obeyspaces\let =\ \tt
        PROGRAM NF(OUTPUT);
        VAR R,C: INTEGER:
        BEGIN
        FOR R:=1 TO 11 DO
           BEGIN
           FOR C:=1 TO 15 DO
              IF C<=5 THEN WRITE('*')
              ELSE IF C>=11 THEN WRITE('*')
              ELSE IF C>=5+R THEN WRITE(' ')
              ELSE IF C>=1+R THEN WRITE('*')
              ELSE WRITE(' ');
           WRITELN
           END
        END.
}


{\rmn
{\narrower\smallskip\noindent
{\bf Exercise:} Design an algorithm to print a letter `{\tt Z}'.
\smallskip}
}


\bigskip
\line{\copyright 1984 Robert W. Floyd; 
First draft (not published) March 28, 1984\hfil}
%revised: Date; subsequently revised.\hfill}

\bye